package org.example.lesson02;

import java.io.*;
import java.util.Scanner;

public class les02_Demo_test3 {
    public static void main(String[] args) {
        //1.获取用户输入的路径
        System.out.println("请输入要扫描的路径：");
        Scanner in=new Scanner(System.in);
        String rootPath=in.next();
        //根据用户的输入创建一个文件对象
        File rootFile = new File(rootPath);
        //2.判断路径是否有效
        //判断路径是否存在
        if(!rootFile.exists()){
            System.out.println("输入的路径不存在.");
            return;
        }
        //判断路径是否是目录
        if(!rootFile.isDirectory()){
            System.out.println("输入的路径不是一个有效目录.");
            return;
        }
        //3.获取用户输入的关键字
        System.out.println("请输入关键字：");
        String keyword=in.next();
        //校验关键字
        if(keyword==null||keyword.isEmpty()){
            System.out.println("输入的关键字不能为空.");
        }
        //查找过程
        scan(rootFile,keyword);
    }

    private static void scan(File rootFile, String keyword) {
        //获取扫描目录下的所有子目录和普通文件
        File[] files = rootFile.listFiles();
        //校验数组是否为空
        if(files.length==0){
            return;
        }
        //遍历数组中的所有文件
        for (File file : files) {
            //判断文件是不是普通文件
            if(file.isFile()){
                boolean bool=checkFile(file,keyword);
                if(!bool){
                    //没有找到目标文件
                    continue;
                }
                //接收用户的删除指令
                System.out.println("找到文件："+file.getAbsolutePath()+"包含关键字："+keyword+", 是否删除？(Y/N)");
                //接收用户输入
                Scanner scanner=new Scanner(System.in);
                String opt=scanner.next();
                //判断指令
                if(opt.toLowerCase().equals("y")){
                    //删除操作
                    file.delete();
                    System.out.println("删除文件"+file.getAbsolutePath()+"成功");
                }
            }else{
                //File是目录，递归执行
                scan(file,keyword);
            }
        }
    }

    private static boolean checkFile(File file, String keyword) {
        //1.判断文件名是否包含关键字
        //获取文件名
        String fileName=file.getName();
        if(fileName.contains(keyword)){
            //在文件名中找到了关键字
            return true;
        }
        //2.读取文件内容，内容中是否包含关键字
        try(InputStream inputStream=new FileInputStream(file)){
            //创建一个用于保存文件内容的对象
            StringBuilder stringBuilder=new StringBuilder();
            //创建一个Scanner用来简化文本文件的读取
            Scanner scanner=new Scanner(inputStream);
            //循环读取内容
            while(true){
                //判断文件是否到结尾
                if(!scanner.hasNextLine()){
                    break;
                }
                //把内容添加到stringBuilder中
                stringBuilder.append(scanner.nextLine());
            }
            //校验内容中是否包含关键字
            if (stringBuilder.indexOf(keyword)>-1) {
                return true;
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //文件不符合查找要求
        return false;
    }
}
